/**
 * 验证身份证有效性
 * @param Arg_ID 身份证号
 * @returns 返回true：正确；返回false：不正确
 */
function ID_Validity(Arg_ID) {
  // 添加输入参数的类型和空值检查
  if (!Arg_ID || typeof Arg_ID !== "string") {
    return false;
  }

  num = Arg_ID.toUpperCase(); //身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。
  if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)) {
    //alert('输入的身份证号长度不对，或者号码不符合规定！\n15位号码应全为数字，18位号码末位可以为数字或X。');
    //alert('身份证号长度不正确或不符合规定！');
    return false;
  }
  //验证前2位，城市符合
  var aCity = {
    11: "北京",
    12: "天津",
    13: "河北",
    14: "山西",
    15: "内蒙古",
    21: "辽宁",
    22: "吉林",
    23: "黑龙江 ",
    31: "上海",
    32: "江苏",
    33: "浙江",
    34: "安徽",
    35: "福建",
    36: "江西",
    37: "山东",
    41: "河南",
    42: "湖北",
    43: "湖南",
    44: "广东",
    45: "广西",
    46: "海南",
    50: "重庆",
    51: "四川",
    52: "贵州",
    53: "云南",
    54: "西藏",
    61: "陕西",
    62: "甘肃",
    63: "青海",
    64: "宁夏",
    65: "新疆",
    71: "台湾",
    81: "香港",
    82: "澳门",
    91: "国外",
  };
  if (aCity[parseInt(num.substr(0, 2))] == null) {
    //alert('身份证号不正确或不符合规定！');
    return false;
  }
  //alert('城市:'+aCity[parseInt(num.substr(0,2))]);

  //下面分别分析出生日期和校验位
  var len, re;
  len = num.length;
  if (len == 15) {
    re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
    var arrSplit = num.match(re); //检查生日日期是否正确
    var dtmBirth = new Date(
      "19" + arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]
    );
    var bGoodDay;
    bGoodDay =
      dtmBirth.getYear() == Number(arrSplit[2]) &&
      dtmBirth.getMonth() + 1 == Number(arrSplit[3]) &&
      dtmBirth.getDate() == Number(arrSplit[4]);
    if (!bGoodDay) {
      //alert('身份证号的出生日期不对！');
      return false;
    } else {
      //将15位身份证转成18位 //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
      var arrInt = new Array(
        7,
        9,
        10,
        5,
        8,
        4,
        2,
        1,
        6,
        3,
        7,
        9,
        10,
        5,
        8,
        4,
        2
      );
      var arrCh = new Array(
        "1",
        "0",
        "X",
        "9",
        "8",
        "7",
        "6",
        "5",
        "4",
        "3",
        "2"
      );
      var nTemp = 0,
        i;
      num = num.substr(0, 6) + "19" + num.substr(6, num.length - 6);
      for (i = 0; i < 17; i++) {
        nTemp += num.substr(i, 1) * arrInt[i];
      }
      num += arrCh[nTemp % 11];
      return true;
    }
  }
  if (len == 18) {
    re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
    var arrSplit = num.match(re); //检查生日日期是否正确
    var dtmBirth = new Date(
      arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]
    );
    var bGoodDay;
    bGoodDay =
      dtmBirth.getFullYear() == Number(arrSplit[2]) &&
      dtmBirth.getMonth() + 1 == Number(arrSplit[3]) &&
      dtmBirth.getDate() == Number(arrSplit[4]);
    if (!bGoodDay) {
      //alert(dtmBirth.getYear());
      //alert(arrSplit[2]);
      //alert('身份证号的出生日期不对！');
      return false;
    } else {
      //检验18位身份证的校验码是否正确。 //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
      var valnum;
      var arrInt = new Array(
        7,
        9,
        10,
        5,
        8,
        4,
        2,
        1,
        6,
        3,
        7,
        9,
        10,
        5,
        8,
        4,
        2
      );
      var arrCh = new Array(
        "1",
        "0",
        "X",
        "9",
        "8",
        "7",
        "6",
        "5",
        "4",
        "3",
        "2"
      );
      var nTemp = 0,
        i;
      for (i = 0; i < 17; i++) {
        nTemp += num.substr(i, 1) * arrInt[i];
      }
      valnum = arrCh[nTemp % 11];
      if (valnum != num.substr(17, 1)) {
        //alert('18位身份证的校验码不正确！应该为：' + valnum);
        //alert('18位身份证号的校验码不正确！');
        return false;
      }
      return true;
    }
  }
  return false;
}
/**
 * 提取身份证中的生日
 * @param Arg_ID 输入身份证号
 * @returns 返回生日
 */
function Return_BirthdayByID(Arg_ID) {
  //获取出生日期
  var ls_Birthday =
    Arg_ID.substring(6, 10) +
    "-" +
    Arg_ID.substring(10, 12) +
    "-" +
    Arg_ID.substring(12, 14);
  return ls_Birthday;
}
/**
 * 提取身份证中的生日,计算年龄
 * @param Arg_ID 输入身份证号
 * @returns 返回年龄
 */
function Return_AgeByID(Arg_ID) {
  //获取年龄
  var myDate = new Date();
  var month = myDate.getMonth() + 1;
  var day = myDate.getDate();
  var age = myDate.getFullYear() - Arg_ID.substring(6, 10) - 1;
  if (
    Arg_ID.substring(10, 12) < month ||
    (Arg_ID.substring(10, 12) == month && Arg_ID.substring(12, 14) <= day)
  ) {
    age++;
  }
  return age;
}
/**
 * 提取身份证中的性别
 * @param Arg_ID 输入身份证号
 * @returns 返回性别
 */
function Return_SexByID(Arg_ID) {
  //获取性别
  if (parseInt(Arg_ID.substr(16, 1)) % 2 == 1) {
    //男
    return "男";
  } else {
    //女
    return "女";
  }
}
function Article_Number_Validity(Arg_Article_Number, Arg_Datagrid) {
  var lboolean = false;
  var lboolean_Article_Number = false;
  var lDatagrid_ID;
  if (this == Arg_Datagrid) {
    lDatagrid_ID = Arg_Datagrid.id;
  } else {
    lDatagrid_ID = Arg_Datagrid;
  }
  //获得当前被编辑行的行号
  var li_EditIndex = $("#" + lDatagrid_ID).edatagrid("options").editIndex;
  //获得当前编辑页的行
  var lJSONArray_Rows = $.parseJSON(
    JSON.stringify($("#" + lDatagrid_ID).edatagrid("getRows"))
  );
  //移除当前被编辑行
  lJSONArray_Rows.splice(li_EditIndex, 1);
  $.map(lJSONArray_Rows, function (Row) {
    if (Row.Article_Number == Arg_Article_Number) {
      //alert("货号已经存在，请在原货号处修改。");
      lboolean_Article_Number = true;
    }
  });
  if (!lboolean_Article_Number) {
    $.ajax({
      type: "post",
      url: "Query_Size_ClassUesd_ByArticleNumberOrPO_Number_Web.action",
      data: { Article_Number_Data: Arg_Article_Number },
      cache: false,
      async: false,
      dataType: "json",
      success: function (data) {
        //var editor = $("#" + lDatagrid_ID).edatagrid('getEditor', {index:li_EditIndex, field:"Size_Class"});
        if (data.Status == "success") {
          //Defined_Datagrid_Column_Title(lDatagrid_ID, "Add", data);

          //$.map(data.Size_Class, function(Column, Size_Class) {
          //var editor = $("#" + lDatagrid_ID).edatagrid('getEditor', {index:Arg_Index, field:"Size_Class"});
          //	if (editor == null) {
          //		editor = $("#" + lDatagrid_ID).edatagrid('getEditor', {index:li_EditIndex, field:"Size_Class"});
          //$(editor.target).textbox("setValue", Size_Class);
          //	}
          //	$(editor.target).textbox("setValue", Size_Class);
          //	$.map(Column, function(field) {
          //		if (Valid_Size_Field(field.Size_Postion) && field.Size != "") {
          //			editor = $("#" + lDatagrid_ID).edatagrid('getEditor', {index:li_EditIndex, field:field.Size_Postion});
          //			$(editor.target).numberbox({editable:true,}).textbox('addClearBtn', 'icon-clear');
          //		}
          //	})
          //})
          lboolean = true;
          //Datagrid_Editor_AddClearBtn(Arg_Datagrid, Arg_Index);
        } else if (data.Status == "fail") {
          //$(this).textbox("setValue", "")
          //alert(data.Result + "\n" + data.Cause)
          //if (editor != null) {
          //	$(editor.target).textbox("setValue", "");
          //}
          lboolean = false;
        }

        //Payment_Amount
      },
    });
  }

  return lboolean;
}
/**
 * 扩展textbox有效性检查类型
 */
// $.extend($.fn.validatebox.defaults.rules, {
// 	Article_Number_Validity: {
// 		validator: function(value, param){

// 			return Article_Number_Validity(value, param[0]);
// 		},
// 		message: '请输入正确的商品编码，或商品编码已经存在，请在原货号处修改。'
// 	},
// 	idValidity: {
//         validator: function(value, param){
//         	/*
//         	var ls_Age_Min = decodeURI(decodeURI(getUrlParam("AgeMin")));
//         	var ls_Age_Max = decodeURI(decodeURI(getUrlParam("AgeMax")));
//         	var ls_Group = decodeURI(decodeURI(getUrlParam("Group")));

//         	var li_Age_Sum = 0;
//         	var lboolean_Age = true;

//         	if (param[0].id == "txtID") {
//         		if (value == $("#txtID1").textbox("getValue")) {
//             		return false;
//             	} else {
//             		if (ls_Group == "B") {
//             			li_Age_Sum = Return_AgeByID(value);
//             			if (li_Age_Sum >= ls_Age_Min) {
//             				lboolean_Age = true;
//             			} else {
//             				lboolean_Age = false;
//             			}
//             		} else {
//             			if ($("#txtAthlete_Age1").textbox("getValue") == "") {
//                 			li_Age_Sum = Return_AgeByID(value)
//                 		} else {
//                 			li_Age_Sum = parseInt($("#txtAthlete_Age1").textbox("getValue")) + parseInt(Return_AgeByID(value))
//                 		}
//                 		if (ls_Age_Max=="0") {
//                 			if (li_Age_Sum >= ls_Age_Min) {
//                 				lboolean_Age = true;
//                 			} else {
//                 				lboolean_Age = false;
//                 			}
//                 		} else {
//                 			if (li_Age_Sum >= ls_Age_Min && li_Age_Sum <= ls_Age_Max) {
//                 				lboolean_Age = true;
//                 			} else {
//                 				lboolean_Age = false;
//                 			}
//                 		}
//             		}
//             	}
//         	} else {
//         		if (value == $("#txtID").textbox("getValue")) {
//             		return false;
//             	} else {
//             		if (ls_Group == "B") {
//             			li_Age_Sum = Return_AgeByID(value);
//             			if (li_Age_Sum >= ls_Age_Min) {
//             				lboolean_Age = true;
//             			} else {
//             				lboolean_Age = false;
//             			}
//             		} else {
//             			if ($("#txtAthlete_Age").textbox("getValue") == "") {
//                 			li_Age_Sum = Return_AgeByID(value)
//                 		} else {
//                 			li_Age_Sum = parseInt($("#txtAthlete_Age").textbox("getValue")) + parseInt(Return_AgeByID(value))
//                 		}
//                 		if (ls_Age_Max=="0") {
//                 			if (li_Age_Sum >= ls_Age_Min) {
//                 				lboolean_Age = true;
//                 			} else {
//                 				lboolean_Age = false;
//                 			}
//                 		} else {
//                 			if (li_Age_Sum >= ls_Age_Min && li_Age_Sum <= ls_Age_Max) {
//                 				lboolean_Age = true;
//                 			} else {
//                 				lboolean_Age = false;
//                 			}
//                 		}
//             		}
//             	}
//         	}*/
//         	return ID_Validity(value); //&& Return_SexByID(value) == "女" && lboolean_Age;
//         },
//         message: '身份证号码不正确。'
//     },
// 	isWoman: {
// 		validator: function(value, param){

//             return value == "女";
//         },
//         message: '报名运动员性别不符。'
// 	},
// 	isMan: {
// 		validator: function(value, param){

//             return value == "男";
//         },
//         message: '报名运动员性别不符。'
// 	},
// 	ageValidity: {
// 		 validator: function(value, param){

// 	            return ID_Validity(value);
// 	        },
// 	        message: '请输入正确的身份证号码。'
// 	},
// 	moblieValidity: {
// 		 validator: function(value, param){

// 	            return validatemobile(value);
// 	        },
// 	        message: '请输入正确的手机号。'
// 	},
// 	equals: {
//         validator: function(value,param){
//             return value == $(param[0]).val();
//         },
//         message: '两次输入密码不一致。'
//     }
// });
/**
 * 检测输入的手机号的有效性
 * @param mobile
 * @returns
 */
function validatemobile(mobile) {
  // 添加输入参数的类型和空值检查
  if (!mobile || typeof mobile !== "string") {
    return false;
  }

  if (mobile.length == 0) {
    //alert('请输入手机号码！');
    //document.form1.mobile.focus();
    return false;
  }
  if (mobile.length != 11) {
    //alert('请输入有效的手机号码！');
    //document.form1.mobile.focus();
    return false;
  }

  // 更新手机号正则表达式，支持所有中国大陆有效号段
  var myreg = /^1[3-9]\d{9}$/;
  if (!myreg.test(mobile)) {
    //alert('请输入有效的手机号码！');
    //document.form1.mobile.focus();
    return false;
  }
  return true;
}

/**
 * 检测输入的营业执照号的有效性
 * @param Arg_ID
 * @returns
 */
function ID_Business(Arg_ID) {
  if (typeof Arg_ID !== "string" || Arg_ID.length !== 18) {
    return false;
  }

  // 正则表达式校验字符范围
  if (!/^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/.test(Arg_ID)) {
    return false;
  }

  // 校验码计算
  const weights = [
    1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28,
  ];
  const chars = "0123456789ABCDEFGHJKLMNPQRTUWXY";
  let sum = 0;

  for (let i = 0; i < 17; i++) {
    const c = Arg_ID.charAt(i);
    const value = chars.indexOf(c);
    sum += value * weights[i];
  }

  const checkCodeIndex = (31 - (sum % 31)) % 31;
  const checkCode = chars.charAt(checkCodeIndex);

  return checkCode === Arg_ID.charAt(17).toUpperCase();
}
